package uy.org.softtech.cssuite.web.entidad;

import static uy.org.softtech.cssuite.helpers.HelperFechaHora.duracion;
import static uy.org.softtech.cssuite.helpers.HelperFechaHora.fechaLarga;

import java.io.Serializable;
import java.util.Date;
import java.util.Locale;

import org.codehaus.jackson.annotate.JsonIgnoreProperties;
import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonRootName;

/**
 * Entidad que representa una sesión de usuario.
 *
 * @author fabian.lobo
 */
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonRootName(value = "sesion")
public class SesionUsuario implements Serializable {

	private static final long serialVersionUID = -6781499960405676205L;

	@JsonProperty(value = "usuario")
	private String usuario;
	
	@JsonProperty(value = "sesion")
	private String sesion;
	
	@JsonProperty(value = "direccion")
	private String direccion;
	
	@JsonProperty(value = "navegador")
	private String navegador;
	
	@JsonProperty(value = "plataforma")
	private String plataforma;
	
	@JsonProperty(value = "lenguaje")
	private String lenguaje;
	
	@JsonProperty(value = "comienzo")
	private Date horaComienzo;
	
	@JsonProperty(value = "ultimo")
	private Date ultimoPedido;
	
	@JsonProperty(value = "duracion")
	private String duracion;
	
	/*
	 *  GETTERS
	 */
	public String getUsuario() {
		return usuario;
	}
	public String getSesion() {
		return sesion;
	}
	public String getDireccion() {
		return direccion;
	}
	public String getNavegador() {
		return navegador;
	}
	public String getPlataforma() {
		return plataforma;
	}
	public String getLenguaje() {
		return lenguaje;
	}
	public String getHoraComienzo() {
		return fechaLarga(horaComienzo);
	}
	public String getUltimoPedido() {
		return fechaLarga(ultimoPedido);
	}
	public String getDuracion() {
		return duracion;
	}
	
	/*
	 *  SETTERS
	 */
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}
	public void setSesion(String sesion) {
		this.sesion = sesion;
	}
	public void setDireccion(String direccion) {
		this.direccion = direccion;
	}
	public void setNavegador(String navegador) {
		this.navegador = navegador;
	}
	public void setPlataforma(String plataforma) {
		this.plataforma = plataforma;
	}
	public void setLenguaje(String lenguaje) {
		this.lenguaje = lenguaje;
	}
	public void setHoraComienzo(Date horaComienzo, Locale locale) {
		this.horaComienzo = horaComienzo;
		calcularDuracion(locale);
	}
	public void setUltimoPedido(Date ultimoPedido, Locale locale) {
		this.ultimoPedido = ultimoPedido;
		calcularDuracion(locale);
	}
		
	private void calcularDuracion(Locale locale) {
		if(this.horaComienzo != null && this.ultimoPedido != null) {
			this.duracion =  duracion(horaComienzo.getTime(), ultimoPedido.getTime(), locale);
		}
	}
	
	@Override
	public String toString() {
		StringBuilder builder = new StringBuilder();
		builder.append("SesionUsuario [");
		builder.append("usuario=" + getUsuario() + ", ");
		builder.append("sesion=" + getSesion() + ", ");
		builder.append("direccion=" + getDireccion() + ", ");
		builder.append("navegador=" + getNavegador() + ", ");
		builder.append("plataforma=" + getPlataforma() + ", ");
		builder.append("lenguaje=" + getLenguaje() + ", ");
		builder.append("horaComienzo=" + getHoraComienzo() + ", ");
		builder.append("ultimoPedido=" + getUltimoPedido() + ", ");
		builder.append("duracion=" + getDuracion());
		builder.append("]");
		return builder.toString();
	}
}
